# encoding: utf-8
"""
@author: 夏洛
@QQ: 1972386194
@file: mains.py
"""
from sqlalchemy.dialects.mssql.information_schema import views

'''

flask 核心文件

配置 mysql配属

title  分类标题
desc    详情数据
read    点击量


'''

from flask_migrate import Migrate, MigrateCommand
from flask import Flask,render_template,views
from flask_sqlalchemy import SQLAlchemy
from flask_script import Manager



HOST = '127.0.0.1'
PORT = '3306'
DATABASE = 'x_xls'
USERNAME = 'root'
PASSWORD = '123456'
DB_URI = "mysql+pymysql://{username}:{password}@{host}:{port}/{db}?charset=utf8".format(username=USERNAME,password=PASSWORD, host=HOST,port=PORT, db=DATABASE)

app = Flask(__name__)

class Config(object):
    # 设置连接数据库的URL
    app.config['SQLALCHEMY_DATABASE_URI'] = DB_URI
    # 设置sqlalchemy自动更跟踪数据库
    SQLALCHEMY_TRACK_MODIFICATIONS = True
    # 设置密钥，用于csrf_token的加解密  表单数据传递签名
    app.config["SECRET_KEY"] = "xhosd6f982yfhowefy29f"

app.config.from_object(Config)
# 创建数据库sqlalchemy工具对象
db = SQLAlchemy(app)

# 初始化 migrate
# 两个参数一个是 Flask 的 app，一个是数据库 db
migrate = Migrate(app, db)

# 初始化管理器
manager = Manager(app)

# 添加 db 命令，并与 MigrateCommand 绑定
manager.add_command('db', MigrateCommand)

# 标签表   数据表模型
class Tag(db.Model):
    '''
     模型映射表
      变量名 ---  字段名
        类型 db.String(150)  --- 》 charset 150
        __tablename__    表名字
    '''
    __tablename__ = 'tb_cat'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    title = db.Column(db.String(150))
    desc = db.Column(db.TEXT)
    read = db.Column(db.Integer,default=0)

    # 查询的queryset 返回名字  相当于标记
    def __str__(self):
        return 'title:%s' % self.title


# 面向对象思维来编写
class IndexView(views.MethodView):
    def __render(self):
        obj = Tag.query.all()   # select * from  tb_cat
        text = Tag.query.filter_by(id=1).first()
        context = {
            'title' : obj,
            "text" : text,
        }
        return render_template('index.html',objs = context)

    def get(self):
        return self.__render()

    def post(self):
        pass

# 注册类视图 路由系统
app.add_url_rule('/',view_func= IndexView.as_view("index"))


class QueryView(views.MethodView):
    def get(self,c_id):
        tag_id = c_id
        obj = Tag.query.all()

        text = Tag.query.filter_by(id=tag_id).first()
        context = {
            'text': text,
            'read':text.read,
            'title': obj,
            'id': tag_id,
        }
        return render_template('index.html',  objs=context)

app.add_url_rule('/<c_id>', view_func=QueryView.as_view('id'))


def index():
    # 第一次访问 传第一页的数据
    def __render():
        return render_template('index.html')


if __name__ == '__main__':
    # 通过管理对象来启动flask
    manager.run()
















